It has become commonplace to connect a host computer to a flexible number of various functional devices (such as storage devices, communications devices, sensing devices, and the like that can be either removable or fixed in nature) using a plurality of conducting wires referred to as a “bus” that typically complies with well known standards. In most situations, the number of conducting wires included in the bus is not the same as the number of devices connected and therefore the number of conducting wires that constitute the bus are shared amongst any and all of the devices connected to the bus. Since all the devices share the same conducting wires within the bus and in order for the host computer to communicate with each of the devices, each device is both assigned a unique address and subsequently programmed to respond only to messages that are addressed to that unique address. In this way, multiple devices can share the same conducting wires that form the bus resulting in a substantially reduced bus size than would be otherwise be required.
Since the host computer typically does not know these addresses prior to initialization, there must be a process of associating each device with a corresponding unique address (also referred to as a session address) for the duration of the communication session. In some devices, such as MultiMediaCard, or MMC, the device addresses are assigned by the host computer as a part of the initialization process. In other devices, such as SecureDigital memory card, or SD, the device addresses are inherent to the device and are sent to the host from the device upon device initialization (it should be noted that in such systems, a replacement mechanism in place at the host computer typically prevents collision between names). Regardless of the type of device, the host computer must to be able to selectively communicate with each device prior to an assignment of the session address.
Unfortunately, however, until addresses are assigned to all the devices, there is no way for the host computer to select any single device out any of the plurality of devices sharing the bus. There have been many attempts at solving this problem, one of which is described in U.S. Pat. No. 5,204,669 (referred hereinafter as the '669 patent) issued to Dorfe that describes a method for associating an address to each of a number of functional devices sharing a bus. However, the method described in the '669 patent requires that the physical structure of the host computer be modified in order to establish a hardware connection between the host computer and a first one of the functional devices. This approach requires substantial modification of the host computer and is therefore not a desirable approach for at least the fact that it would increase the cost and complexity of the host computer. In addition to requiring that the host computer be physically modified, the '669 patent requires that all of the functional devices that share the same bus must be configured in a particular manner in order to successfully function within the framework described in the '669 patent. For example each of the functional devices described in the '669 patent must be able to accommodate control lines 18 and 20 as well as enable return circuitry 30. Therefore any device not so configured (referred to in this discussion as a legacy device) cannot be accommodated in a system constructed along the lines described in the '669 patent.
Another approach is described in U.S. Pat. No. 6,189,059 (hereinafter the '059 patent) and U.S. Pat. No. 6,209,022 (hereinafter the '022 patent), both by Sotek et al., describing a method of associating an address to each of a number of functional devices sharing a bus. The method described by the '059 and '022 patents requires the use of open-drain output circuits to enable all devices to transmit their unique identifiers during initialization. Each device also monitors the bus to see if any other device has pulled the line, i.e., to detect transmissions of others. However the use of open-drain output circuits limits the bus operating frequencies during initialization and cannot be used in systems where open-drain output circuits are not available. Also, it is only possible for devices that have their addresses assigned by the host computer as part of the initialization process and can not be used for devices that have inherent addresses which are sent to the host from each device upon its initialization. In addition, the '059 and '022 patents require that each device listens to the bus during initialization and stops its own transmission when it detects a different transmission of another device being transmitted on the bus. This requires that all devices monitor the initialization process of all other devices without allowing the host to initialize each device separately. Furthermore, the '059 and '022 patents do not accommodate a legacy device that was not designed to share the bus with other devices that were designed along the lines of the '059 and '022 patents.
Therefore, it would be desirable to have a method for communicating with each of the devices on the bus individually and associate it with an address during the initialization process.